package com.aqie.easy.string;

import java.util.HashMap;
import java.util.Map;

/**
 * 551 学生出勤记录 todo
 * 不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),那么这个学生会被奖赏
 */
public class CheckRecord {
    /**
     * 1. 考虑空指针  7ms  map
     * 2. 不超过两个连续的迟到
     * @param s
     * @return
     */
    public static boolean checkRecord(String s) {
        Map<Character, Integer> map = new HashMap<>();
        for (Character c : s.toCharArray()){

            map.put(c, map.getOrDefault(c, 0) + 1);
            if (c != 'L') map.put('L', 0);
            if (map.getOrDefault('A', 0) > 1 || map.getOrDefault('L', 0) > 2) return false;
        }
        return true;
    }

    /**
     * 2. 4ms 不借助map
     * @param s
     * @return
     */
    public boolean checkRecord2(String s) {
        int a = 0;
        int l = 0;

        for (int i = 0;i < s.length();i++) {
            if (s.charAt(i) == 'A') {
                a++;
            }

            int c = 0;
            while (i < s.length() && s.charAt(i) == 'L') {
                c++;
                i++;
            }

            l = Math.max(l,c);

            if (c > 0) {
                i--;// 这里i需要--，因为统计退出条件会让i指向L的下一个字符，然后外面的for循环i++，这时候就会跳过L的下一个字符，会有遗漏
                // 或者i不--，像下面那样再检查一次也可以
                // if (i < s.length() && s.charAt(i) == 'A') {
                //     a++;
                // }
            }
        }

        return a <= 1 && l <= 2;
    }


    /**
     * 3. ,用两个int统计缺勤次数和迟到次数即可,缺勤次数不清0,迟到次数会被到场和缺勤清零 1ms
     * @param s
     * @return
     */
    public boolean checkRecord3(String s) {
        int absent=0;
        int late=0;
        for (int i=0;i<s.length();i++){
            if (s.charAt(i)=='A'){
                late=0;
                absent++;
                if (absent>1)
                    return false;
            }
            else if (s.charAt(i)=='L'){
                late++;
                if (late>2)
                    return false;
            }
            else
                late=0;
        }
        return true;
    }

    public static void main(String[] args) {
        String s = "LALL";
        s = "PPALLL";
        System.out.println(checkRecord(s));
    }
}
